package com.iyao_app.util;

import com.iyaowoqu.base_library.util.TimeUtils;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 作者 :  胡家兵
 * 时间 :  2017/11/28.
 */

public class TimeFormat {


    public static String getSignTime(long time) {
        DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd");
        String s = TimeUtils.millis2String(time, df2);
        return s;
    }


    public static String getTime(long time) {
        String s;
        if (TimeUtils.isToday(time)) {//今天
            s = format(time);
        } else {
            if (TimeUtils.isNowYear(time)) {//今年
                DateFormat df1 = new SimpleDateFormat("MM-dd HH:mm");
                s = TimeUtils.millis2String(time, df1);
            } else {
                DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
                s = TimeUtils.millis2String(time, df2);
            }
        }
        return s;
    }

    public static String getTime(String str) {
        long time = Long.parseLong(str);
        String s;
        if (TimeUtils.isToday(time)) {//今天
            s = format(time);
        } else {
            if (TimeUtils.isNowYear(time)) {//今年
                DateFormat df1 = new SimpleDateFormat("MM-dd HH:mm");
                s = TimeUtils.millis2String(time, df1);
            } else {
                DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
                s = TimeUtils.millis2String(time, df2);
            }
        }
        return s;
    }

    private static final long ONE_MINUTE = 60000L;
    private static final long ONE_HOUR = 3600000L;

    private static final String ONE_SECOND_AGO = "秒前";
    private static final String ONE_MINUTE_AGO = "分钟前";
    private static final String ONE_HOUR_AGO = "小时前";


    public static String format(long time) {
        Date date = new Date(time);
        long delta = new Date().getTime() - date.getTime();
        if (delta < 1L * ONE_MINUTE) {
            long seconds = toSeconds(delta);
            return (seconds <= 0 ? 1 : seconds) + ONE_SECOND_AGO;
        }
        if (delta < 45L * ONE_MINUTE) {
            long minutes = toMinutes(delta);
            return (minutes <= 0 ? 1 : minutes) + ONE_MINUTE_AGO;
        }
        if (delta < 24L * ONE_HOUR) {
            long hours = toHours(delta);
            return (hours <= 0 ? 1 : hours) + ONE_HOUR_AGO;
        }
        return "刚刚";
    }

    private static long toSeconds(long date) {
        return date / 1000L;
    }

    private static long toMinutes(long date) {
        return toSeconds(date) / 60L;
    }

    private static long toHours(long date) {
        return toMinutes(date) / 60L;
    }

    private static long toDays(long date) {
        return toHours(date) / 24L;
    }


    // 根据年月日计算年龄,birthTimeString:"1994-11-14"
    private static int getAgeFromBirthTime(String birthTimeString) {
        // 先截取到字符串中的年、月、日
        String strs[] = birthTimeString.trim().split("-");
        int selectYear = Integer.parseInt(strs[0]);
        int selectMonth = Integer.parseInt(strs[1]);
        int selectDay = Integer.parseInt(strs[2]);
        // 得到当前时间的年、月、日
        Calendar cal = Calendar.getInstance();
        int yearNow = cal.get(Calendar.YEAR);
        int monthNow = cal.get(Calendar.MONTH) + 1;
        int dayNow = cal.get(Calendar.DATE);

        // 用当前年月日减去生日年月日
        int yearMinus = yearNow - selectYear;
        int monthMinus = monthNow - selectMonth;
        int dayMinus = dayNow - selectDay;

        int age = yearMinus;// 先大致赋值
        if (yearMinus < 0) {// 选了未来的年份
            age = 0;
        } else if (yearMinus == 0) {// 同年的，要么为1，要么为0
            if (monthMinus < 0) {// 选了未来的月份
                age = 0;
            } else if (monthMinus == 0) {// 同月份的
                if (dayMinus < 0) {// 选了未来的日期
                    age = 0;
                } else if (dayMinus >= 0) {
                    age = 1;
                }
            } else if (monthMinus > 0) {
                age = 1;
            }
        } else if (yearMinus > 0) {
            if (monthMinus < 0) {// 当前月>生日月
            } else if (monthMinus == 0) {// 同月份的，再根据日期计算年龄
                if (dayMinus < 0) {
                } else if (dayMinus >= 0) {
                    age = age + 1;
                }
            } else if (monthMinus > 0) {
                age = age + 1;
            }
        }
        return age;
    }

    // 根据时间戳计算年龄
    public static int getAgeFromBirthTime(long birthTimeLong) {
        Date date = new Date(birthTimeLong);
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String birthTimeString = format.format(date);
        if (getAgeFromBirthTime(birthTimeString) != 0) {
            return getAgeFromBirthTime(birthTimeString) - 1;
        }
        return getAgeFromBirthTime(birthTimeString);
    }
}
